home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / zugabe / va45 / visual45 / library / extend / library.s < prev    next >
Text File  |  1998-05-23  |  8KB  |  321 lines

  1.  
  2. ; Les fonctions en tête sont incluses tout le temps ...
  3.  
  4. ;------------------------------------------------------------------------------
  5. ; Method name : -
  6. ; Asm label   : GWVA_COUNT_BYTES_0
  7. ; Description : Donne la taille d'une chaine terminée par 0
  8. ; Asm label   : GWVA_COUNT_BYTES
  9. ; Description : Donne la taille d'une chaine terminée par la valeur de d0.b
  10. ;
  11. ; Rq  : Ne touche aucun autre registre que d0
  12. ;
  13. ; in  : a0.l = pointeur sur la chaine de caractère
  14. ; in  : d1.b = terminateur de chaine (pour GWVA_COUNT_BYTES)
  15. ; out : d0.l = longueur de la chaine sans le caractère de fin
  16. ;
  17. ; 01/02/98 : Création
  18. ;------------------------------------------------------------------------------
  19. GWVA_COUNT_BYTES_0:
  20.     clr.b d1
  21. GWVA_COUNT_BYTES:
  22.     clr.l d0
  23. .redo:    cmp.b 0(a0,d0.l),d1
  24.     beq.s .fin
  25.     addq.l #1,d0
  26.     bra.s .redo
  27. .fin:    rts
  28.  
  29. ;------------------------------------------------------------------------------
  30. ; Method name : -
  31. ; Asm label   : GWVA_SET_PATH
  32. ; Description : Change le path/lecteur courant
  33. ;
  34. ; in  : a0.l = pointeur sur le path voulu 'X:\PATH\',0
  35. ; out : d0.w = code de retour de la fonction dsetpath
  36. ;
  37. ; 16/05/98 : Création
  38. ;------------------------------------------------------------------------------
  39. GWVA_SET_PATH:
  40.     clr d0
  41.     move.b (a0),d0
  42.     cmp.b #'Z',d0
  43.     bgt.s .minuscule
  44.     add.b #$20,d0
  45. .minuscule:
  46.     sub.b #'a',d0
  47.  
  48.     save.l a0
  49.     DSETDRV d0
  50.     load.l a0
  51.  
  52.     DSETPATH 2(a0)
  53.  
  54.     rts
  55.  
  56. *--------------------------------------------------------------------------*
  57. *-------------          Librairies indépendantes          -----------------*
  58. *--------------------------------------------------------------------------*
  59.  
  60. ;------------------------------------------------------------------------------
  61. ; Method name : -
  62. ; Asm label   : GWVA_AFFICH_HEXA
  63. ; Description : Affichage écran d'une chaine en hexadécimal depuis un registre
  64. ;
  65. ; in  : d0.l = donnée à afficher
  66. ; in  : d1.l = nombre de bits à afficher (multiple de 4)
  67. ;
  68. ; 09/02/98 : Création
  69. ;------------------------------------------------------------------------------
  70.  
  71.     ifd LIB_HEXA
  72.  
  73. GWVA_AFFICH_HEXA:    ; affichage hexa d'1 registre : d0=donnée d1=nb bits
  74.     sub #4,d1
  75.     move.l d0,d2    ; d1=nb bits
  76.     lsr.l d1,d2        ; d0=donnée
  77.     and.w #$f,d2
  78.     cmp #$a,d2
  79.     bge.s .lettr
  80.     add.b #'0',d2
  81.     bra.s .fin_lettr
  82. .lettr:    add.b #'A'-$a,d2
  83. .fin_lettr:    save.l d0-d2/a0
  84.     move.w d2,-(sp)
  85.     appel dos,2,4
  86.     load.l d0-d2/a0
  87.     tst d1
  88.     bgt.s GWVA_AFFICH_HEXA
  89.     rts
  90.  
  91. ;------------------------------------------------------------------------------
  92. ; Method name : -
  93. ; Asm label   : GWVA_STOCK_HEXA
  94. ; Description : Stocke une chaine depuis un registre en hexadécimal-ASCII en mémoire
  95. ;
  96. ; in  : a1.l = destination de stockage
  97. ; in  : d0.l = donnée à stocker
  98. ; in  : d1.l = nombre de bits à prendre en compte (multiple de 4)
  99. ; out : -1(a1) = 0.b
  100. ;
  101. ; 09/02/98 : Création
  102. ;------------------------------------------------------------------------------
  103.  
  104. GWVA_STOCK_HEXA:
  105.  
  106.     sub #4,d1
  107.     move.l d0,d2
  108.     lsr.l d1,d2
  109.     and.w #$f,d2
  110.     cmp #$a,d2
  111.     bge.s .lettr
  112.     add.b #'0',d2
  113.     bra.s .fin_lettr
  114. .lettr:    add.b #'A'-$a,d2
  115. .fin_lettr:    move.b d2,(a1)+
  116.     tst d1
  117.     bgt.s GWVA_STOCK_HEXA
  118.     clr.b (a1)+
  119.     rts
  120.  
  121. ;------------------------------------------------------------------------------
  122. ; Method name : -
  123. ; Asm label   : GWVA_HEXA2VALUE
  124. ; Description : Transforme une chaine hexa en valeur
  125. ;
  126. ; in  : a0.l = pointe sur la chaine à transcrire
  127. ; in  : d0.b = marque de fin de chaine
  128. ; out : -1(a0) = d0 si d7=GWVA_NO_ERROR_GENERIC
  129. ; out : d1.l = valeur en sortie
  130. ; out : d7.w = GWVA_NO_ERROR_GENERIC ou GWVA_ERROR_GENERIC si erreur dans la chaine
  131. ;
  132. ; 09/02/98 : Création
  133. ;------------------------------------------------------------------------------
  134.  
  135. GWVA_HEXA2VALUE:
  136.     clr.l d1
  137.     moveq #1,d3        ; signe
  138.     cmp.b #'-',(a0)
  139.     bne.s .pas_moins
  140.     neg d3
  141.     lea 1(a0),a0
  142. .pas_moins:    cmp.b #'+',(a0)
  143.     bne.s .pas_plus
  144.     lea 1(a0),a0
  145. .pas_plus:
  146. .redo:    clr.l d2
  147.     move.b (a0)+,d2
  148.     cmp.b d2,d0
  149.     beq.s .fin
  150.     sub.b #'0',d2
  151.     bmi.s .erreur
  152.     cmp.b #9,d2
  153.     ble.s .number
  154.     sub.b #'A'-'0'-$a,d2
  155.     bmi.s .erreur
  156.     cmp.b #$f,d2
  157.     bgt.s .erreur
  158. .letter:
  159. .number:    mulu.l #$10,d1        ; 68030 only
  160.     add.l d2,d1
  161.     bra.s .redo
  162. .fin:    tst d3
  163.     bge.s .resultat_positif
  164.     neg.l d1
  165. .resultat_positif:
  166.     moveq #GWVA_NO_ERROR_GENERIC,d7
  167.     rts
  168.  
  169. .erreur:    moveq #GWVA_ERROR_GENERIC,d7
  170.     rts
  171.  
  172.     endc    ; ifd LIB_HEXA
  173.  
  174. ;------------------------------------------------------------------------------
  175. ; Method name : -
  176. ; Asm label   : GWVA_STOCK_DECI
  177. ; Description : Stocke un registre signé en décimal-ASCII en mémoire
  178. ;
  179. ; in  : a1.l = destination de stockage
  180. ; in  : d0.l = donnée à stocker signée (8 décimales max)
  181. ; out : -1(a1) = 0.b
  182. ;
  183. ; 09/02/98 : Création
  184. ;------------------------------------------------------------------------------
  185.  
  186.     ifd LIB_DECI
  187.  
  188. GWVA_STOCK_DECI:
  189.     move.l #10000000*10,d2    ; sur 8 décimales max
  190.  
  191.     tst.l d0
  192.     bge.s .positif
  193.     move.b #'-',(a1)+
  194.     neg.l d0
  195. .positif:
  196.  
  197. .until_frac0_1:
  198.     divul #10,d3:d2    ; reste:fraction
  199.     tst.l d2
  200.     beq.s .que_zeros
  201.  
  202.     divul d2,d1:d0    ; reste:fraction
  203.     tst.b d0
  204.     bne.s .diff_0
  205.     move.l d1,d0
  206.     bra.s .until_frac0_1
  207. .que_zeros:    move.w #'0'*256,(a1)+
  208.     rts
  209.  
  210. .until_frac0_2:
  211.     divul #10,d3:d2    ; reste:fraction
  212.     tst.l d2
  213.     beq.s .fin_digit
  214.  
  215.     divul d2,d1:d0    ; reste:fraction
  216. .diff_0:    add.b #'0',d0
  217.     move.b d0,(a1)+
  218.     move.l d1,d0    ; on redivise le reste
  219.     bra.s .until_frac0_2
  220. .fin_digit:    clr.b (a1)+
  221.     rts
  222.  
  223. ;------------------------------------------------------------------------------
  224. ; Method name : -
  225. ; Asm label   : GWVA_DECI2VALUE
  226. ; Description : Transforme une chaine décimale en valeur
  227. ;
  228. ; in  : a0.l = pointe sur la chaine à transcrire
  229. ; in  : d0.b = marque de fin de chaine
  230. ; out : -1(a0) = d0 si d7=GWVA_NO_ERROR_GENERIC
  231. ; out : d1.l = valeur en sortie
  232. ; out : d7.w = GWVA_NO_ERROR_GENERIC ou GWVA_ERROR_GENERIC si erreur dans la chaine
  233. ;
  234. ; 09/02/98 : Création
  235. ;------------------------------------------------------------------------------
  236.  
  237. GWVA_DECI2VALUE:
  238.     clr.l d1
  239.     moveq #1,d3        ; signe
  240.     cmp.b #'-',(a0)
  241.     bne.s .pas_moins
  242.     neg d3
  243.     lea 1(a0),a0
  244. .pas_moins:    cmp.b #'+',(a0)
  245.     bne.s .pas_plus
  246.     lea 1(a0),a0
  247. .pas_plus:
  248.  
  249. .redo:    clr.l d2
  250.     move.b (a0)+,d2
  251.     cmp.b d2,d0
  252.     beq.s .fin
  253.     sub.b #'0',d2
  254.     bmi.s .erreur
  255.     cmp.b #9,d2
  256.     bgt.s .erreur
  257.     mulu.l #10,d1        ; 68030 only
  258.     add.l d2,d1
  259.     bra.s .redo
  260. .fin:    tst d3
  261.     bge.s .resultat_positif
  262.     neg.l d1
  263. .resultat_positif:
  264.     moveq #GWVA_NO_ERROR_GENERIC,d7
  265.     rts
  266. .erreur:    moveq #GWVA_ERROR_GENERIC,d7
  267.     rts
  268.  
  269.     endc    ; ifd LIB_DECI
  270.  
  271.     ifd LIB_200HZ
  272.  
  273. ;------------------------------------------------------------------------------
  274. ; Method name : -
  275. ; Asm label   : GWVA_200HZ_GET_CURRENT_COUNTER
  276. ; Description : Pour récupérer en USER le compteur 200 Hz
  277. ;
  278. ; Rq  : à executer en superviseur (SUPEXEC)
  279. ;
  280. ; out : GWVA_200HZ_CURRENT_COUNTER.l
  281. ;
  282. ; 15/02/98 : Création
  283. ;------------------------------------------------------------------------------
  284.  
  285. GWVA_200HZ_GET_CURRENT_COUNTER:
  286.     move.l cpt_200,GWVA_200HZ_CURRENT_COUNTER
  287.     rts
  288.  
  289. ;------------------------------------------------------------------------------
  290. ; Method name : -
  291. ; Asm label   : GWVA_200HZ_GET_DELAY_SINCE_LAST_CALL
  292. ; Description : Donne le délai en 200éme de seconde depuis le dernier appel
  293. ;
  294. ; Rq  : faire clr.l GWVA_200HZ_OLD_COUNTER avant 1er appel
  295. ;
  296. ; out : d0.l = délai depuis le dernier appel en 200ème de seconde
  297. ;
  298. ; 15/02/98 : Création
  299. ;------------------------------------------------------------------------------
  300.  
  301. GWVA_200HZ_GET_DELAY_SINCE_LAST_CALL:
  302.     SUPEXEC GWVA_200HZ_GET_CURRENT_COUNTER
  303.     tst.l GWVA_200HZ_OLD_COUNTER
  304.     bne.s .compare
  305.     move.l GWVA_200HZ_CURRENT_COUNTER,GWVA_200HZ_OLD_COUNTER
  306.     clr.l d0
  307.     rts
  308.  
  309. .compare:    move.l GWVA_200HZ_OLD_COUNTER,d0
  310.     sub.l GWVA_200HZ_CURRENT_COUNTER,d0
  311.     rts
  312.  
  313.  BSS
  314. GWVA_200HZ_OLD_COUNTER:        ds.l 1
  315. GWVA_200HZ_CURRENT_COUNTER:    ds.l 1
  316.  TEXT
  317.  
  318.     endc    ; ifd LIB_200HZ
  319.  
  320. *--------------------------------------------------------------------------*
  321.